package com.whz.serial;

import lombok.extern.slf4j.Slf4j;

import java.io.*;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 * @ClassName TransferStream
 * @Description TODO 文件从内存输出到磁盘再从磁盘输入到内存
 * @Author hongzhi
 * @Date 2021/5/27 11:06
 * @Version 1.0
 */
@Slf4j
public class TransferStream {
    /**
     * 将内存中的对象保存在磁盘上然后从磁盘上读取到内存中
     * 输出原始对象和反序列化得到对象的hashCode
     * @param filePath 文件路径 +文件名称
     * @param consumer 得到将要操作的对象
     * @param <T> 将要操作对象的类型
     * @throws ClassNotFoundException 反序列化读取磁盘文件时,找不到指定文件,抛出该异常
     */
    public static <T> void transfer(String filePath, Supplier<T> consumer) throws ClassNotFoundException {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
             ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath))) {
            T t = consumer.get();
            log.info("将要写入磁盘的对象hashCode : {}", t.hashCode());
            oos.writeObject(t);
            Object readObject = ois.readObject();
            log.info("反序列化得到的对象hashCode : {}", readObject.hashCode());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
